package cn.formaggie.service.impl;

import cn.formaggie.dao.StoreInDao;
import cn.formaggie.dao.StoreItemDao;
import cn.formaggie.dao.StoreOutDao;
import cn.formaggie.entity.model.store.StoreItem;
import cn.formaggie.entity.model.store.StoreOut;
import cn.formaggie.service.face.StoreItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service("storeItemService")
public class StoreItemServiceImpl implements StoreItemService {
    @Autowired
    private StoreItemDao storeItemDao;

    @Autowired
    private StoreInDao storeInDao;

    @Autowired
    private StoreOutDao storeOutDao;

    @Override
    public List<StoreItem> getAllStoreItems() {
        return storeItemDao.getAllStoreItems();
    }

    @Override
    public List<StoreItem> findStoreItems(Map<String, Object> map) {
        return storeItemDao.findStoreItems(map);
    }

    @Override
    public Integer getStoreItemsCount(Map<String, Object> map) {
        return storeItemDao.getStoreItemsCount(map);
    }

    @Override
    public Boolean modifyStoreItemInfo(StoreItem item) {
        return storeItemDao.modifyStoreItemInfo(item)>0?true:false;
    }

    @Override
    public Boolean addStoreItem(StoreItem item) {
        return storeItemDao.addStoreItem(item)>0?true:false;
    }

    @Override
    public List<StoreItem> getWarnings() {
        List<StoreItem> stander=this.getAllStoreItems();
        List<StoreItem> inItems=storeInDao.getInStoreItem();
        List<StoreItem> outItems=storeOutDao.getOutStoreItem();
        List<StoreItem> warningList=new ArrayList<>();
        Map<String,Integer> standerMap=new HashMap<>();
        Map<String,Integer> inItemsMap=new HashMap<>();
        Map<String,Integer> outItemsMap=new HashMap<>();

        initItemMap(stander,standerMap);
        initItemMap(inItems,inItemsMap);
        initItemMap(outItems,outItemsMap);

        for(String name:inItemsMap.keySet()){
            try {
                if(inItemsMap.get(name)-outItemsMap.get(name)<standerMap.get(name)){
                    warningList.add(new StoreItem(name,inItemsMap.get(name)-outItemsMap.get(name)));
                }
            }catch (Exception ex){
                continue;
            }
        }

        return warningList;
    }


    private void initItemMap(List<StoreItem> items,Map<String,Integer> map){
        for(StoreItem item:items){
            map.put(item.getName(),item.getWarning());
        }
    }
}
